﻿<%@ Application Language="C#" %>

<script runat="server">
    MyDbHelper mydb = new MyDbHelper();
    void Application_Start(object sender, EventArgs e) 
    {
        // 在应用程序启动时运行的代码
        Application.Lock();
        Application["useronline"] = 0;
        Application["total"] = 0;
        Application.UnLock();

        #region OnlineUsers

        try
        {
            System.Data.DataTable userTable = new System.Data.DataTable();

            userTable.Columns.Add("SessionID");
            userTable.Columns.Add("UserCode");
            userTable.Columns.Add("UserName");
            userTable.Columns.Add("UserIP");
            userTable.Columns.Add("Browser");
            userTable.Columns.Add("OSName");

            userTable.AcceptChanges();
            Application.Lock();
            Application["OnlineUsers"] = userTable;
            Application.UnLock();
        }

        catch
        {

        }

        #endregion

    }
    
    void Application_End(object sender, EventArgs e) 
    {
        //  在应用程序关闭时运行的代码

    }
        
    void Application_Error(object sender, EventArgs e) 
    { 
        // 在出现未处理的错误时运行的代码

    }

    void Session_Start(object sender, EventArgs e) 
    {
        // 在新会话启动时运行的代码
        Session.Timeout = 2;
        Application.Lock();
        Application["useronline"] = (int)Application["useronline"] + 1;
        Application.UnLock();
    }

    void Session_End(object sender, EventArgs e) 
    {
        // 在会话结束时运行的代码。 
        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为 InProc 时，才会引发 Session_End 事件。
        // 如果会话模式设置为 StateServer 
        // 或 SQLServer，则不会引发该事件。
        Application.Lock();
        Application["useronline"] = (int)Application["useronline"] - 1;
        Application.UnLock();
        if (Session["UserID"] != null && Session["UserID"] != "")
        {
            mydb.DM_ExecuteNonQuery("update sys_loginuser set islogined = 0,logincount=isnull(logincount,0)-1 where userid=" + Session["UserID"]);
        }
            try  
            {  
  
                string sessionid = Session.SessionID;  
  
                System.Data.DataTable userTable = (System.Data.DataTable)Application["OnlineUsers"];  
  
                if (userTable == null)  
  
                    return;  
  
                foreach (System.Data.DataRow row in userTable.Select("SessionID='" + sessionid + "'"))  
  
                {  
  
                   userTable.Rows.Remove(row);  
  
                }  
  
               userTable.AcceptChanges();  
  
                Application.Lock();  
  
                Application["OnlineUsers"]= userTable;  
  
                Application.UnLock();  
  
            }  
  
            catch  
  
            {  
  
            }  
    }
       
</script>
